package com.wxc.impl;

import com.wxc.MySet;
import com.wxc.rbtree.BinaryTree;
import com.wxc.rbtree.IComparator;
import com.wxc.rbtree.RedBlackTree;

/**
 * @author wxc
 * @date 2021年08月16日 8:57 PM
 * 不能添加null
 */
public class TreeSet<E> implements MySet<E> {

	RedBlackTree<E> rbt;

	public TreeSet() {
		this.rbt = new RedBlackTree<>();
	}

	public TreeSet(IComparator<E> comparator) {
		this.rbt = new RedBlackTree<>(comparator);
	}

	@Override
	public int size() {
		return rbt.getSize();
	}

	@Override
	public boolean isEmpty() {
		return rbt.isEmpty();
	}

	@Override
	public void clear() {
		rbt.clear();
	}

	@Override
	public boolean contains(E element) {
		return rbt.contains(element);
	}

	@Override
	public void add(E element) {
		// 默认是去重的
		rbt.add(element);
	}

	@Override
	public void remove(E element) {
		rbt.remove(element);
	}

	@Override
	public void traversal(Visitor<E> visitor) {
		// 两个Visitor不一样
		rbt.infixOrder(
			new BinaryTree.Visitor<E>() {
				@Override
				protected boolean visit(E e) {
					return visitor.visit(e);
				}
			}
		);
	}
}
